package string;
//字符串底层不能改变
/**
 * String不合适频繁修改。内存开销大，性能地下
 * 为了解决这个问题，java提供了一个用于修改字符串的API：StringBuilder
 * <p>
 * StringBuilder内部维护一个可变的char数组吗，修改性能高，开销小。并且
 * 提供了便于修改的字符串相关操作：增删改插等。
 */
public class StringBuilderDemo3 {
    public static void main(String[] args) {
        String str = "好好学习java";
        //创建一个StringBuilder的常用构造器
        //用于复制给定的字符串到内部
        StringBuilder builder = new StringBuilder(str);
        /**
         * 增
         * “好好学习”
         * 到
         * “好好学习java，找个好工作！”
         */
        builder.append("找个好工作！");
        System.out.println(str);//String是不变的对象，内容没有改变
        System.out.println(builder);//改变的是StringBuilder复制的字符串内容
        /**
         * 改
         * 好好学习Java找个好工作
         * 成
         * 好好学习Java为了改变世界
         */
        builder.replace(8,13,"为了改变世界");
        System.out.println(builder);
        /**
         * 删
         * 好好学习Java为了改变世界
         * 到
         * 为了改变世界
         */
        builder.delete(0,8);
        System.out.println(builder);
        /**
         * 插
         * 为了改变世界
         * 到
         * 活着，就是为了改变世界
         */
        builder.insert(0,"活着，就是");
        System.out.println(builder);

        //反转
        builder.reverse();
        System.out.println(builder);

        /**
         * StringBuilder值时一个可以改的工具类不是字符串
         * 当使用StringBuilder修改内容后  可以调用toString方法得到字符串的内容
         */
        String line = builder.toString();
        System.out.println(line);

    }
}
